/*!
 * \file WtHelper.h
 * \project WonderTrader
 *
 * \author Wesley
 * \date 2020/03/30
 * 
 * \brief 回测助手工具类定义文件
 * 
 * \details 本文件定义了WtHelper类，用于在WonderTrader回测框架中提供各种辅助功能。
 *          回测助手工具的主要功能包括：
 *          - 获取当前工作目录
 *          - 管理输出目录配置
 *          - 管理实例目录配置
 *          - 提供路径相关的工具方法
 *          - 为回测框架提供统一的目录管理服务
 */
#pragma once
#include <string>
#include <stdint.h>

/*!
 * \class WtHelper
 * \brief 回测助手工具类
 * 
 * \details WtHelper是WonderTrader回测框架中的工具类，提供目录管理和路径操作的辅助功能。
 *          该类采用静态方法设计，方便在回测框架的各个组件中统一调用。
 *          
 *          主要功能：
 *          - 获取和设置实例目录路径
 *          - 获取和设置输出目录路径
 *          - 获取当前工作目录
 *          - 为回测结果提供统一的存储位置
 *          
 *          使用场景：
 *          - 回测结果文件的输出路径管理
 *          - 配置文件和资源文件的路径定位
 *          - 日志文件的存储位置管理
 *          - 临时文件和缓存文件的目录管理
 */
class WtHelper
{
public:
	/*!
	 * \brief 获取当前工作目录
	 * 
	 * \return 当前工作目录的完整路径字符串
	 * 
	 * \details 获取程序运行时的当前工作目录路径。
	 *          该方法用于确定程序的执行环境，便于相对路径的解析。
	 */
	static std::string getCWD();

	/*!
	 * \brief 获取输出目录路径
	 * 
	 * \return 输出目录的路径字符串指针
	 * 
	 * \details 获取回测框架的输出目录路径。
	 *          输出目录用于存放回测结果、日志文件、报告等输出文件。
	 *          如果未设置输出目录，可能返回默认路径或空值。
	 */
	static const char* getOutputDir();

	/*!
	 * \brief 获取实例目录路径
	 * 
	 * \return 实例目录路径的引用
	 * 
	 * \details 获取当前设置的实例目录路径。
	 *          实例目录通常用于存放配置文件、数据文件等资源。
	 */
	static const std::string& getInstDir() { return _inst_dir; }
	
	/*!
	 * \brief 设置实例目录路径
	 * 
	 * \param inst_dir 实例目录的路径字符串
	 * 
	 * \details 设置回测框架的实例目录路径。
	 *          实例目录用于存放配置文件、策略文件、合约信息等资源文件。
	 *          设置后，框架会从该目录加载相关配置和资源。
	 */
	static void setInstDir(const char* inst_dir) { _inst_dir = inst_dir; }
	
	/*!
	 * \brief 设置输出目录路径
	 * 
	 * \param out_dir 输出目录的路径字符串
	 * 
	 * \details 设置回测框架的输出目录路径。
	 *          输出目录用于存放回测结果、交易日志、性能报告等输出文件。
	 *          设置后，所有输出文件将保存到该目录。
	 */
	static void setOutputDir(const char* out_dir);

private:
	static std::string	_inst_dir;	/*!< 实例目录路径，用于存放配置文件和资源文件 */
	static std::string	_out_dir;	/*!< 输出目录路径，用于存放回测结果和日志文件 */
};

